home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / kob / kob001s.lzh / kofunc.has < prev    next >
Text File  |  1997-03-08  |  27KB  |  1,535 lines

  1.  
  2. *━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  3. *
  4. *    kofunc.has  ……   こ-BASICの標準関数
  5. *
  6. *━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  7.  
  8.  
  9.     .include    fdef.h
  10.     .include    iocscall.mac
  11.  
  12.     .include    variable.h
  13.     .include    kob.h
  14.  
  15.     .xref    hash
  16.     .xref    func参照sysvar
  17.  
  18.     .text
  19.     .even
  20.  
  21.     .xdef    kofunc_init
  22. kofunc_init:
  23.     move.w    d5,-(sp)
  24.  
  25.     lea.l    ptr_token(pc),a5
  26.     lea.l    ptr_param(pc),a0
  27.     lea.l    ptr_exec(pc),a1
  28.     moveq    #0,d3
  29. kofunc_init_loop:
  30.     bsr    hash
  31.  * a2.l = 元の対象の開始アドレス
  32.  * d4.l = (hash.w)(文字数 - 1)
  33.     move.l    d4,(a4)+    * (hash.w)(文字数 - 1)
  34.     move.l    a2,(a4)+    * 名前
  35.     move.w    (a0,d3.w),d0
  36.     lea.l    (a0,d0.w),a2
  37.     move.l    a2,(a4)+    * パラメータリストを指すポインタ
  38.     move.w    (a1,d3.w),d0
  39.     lea.l    (a1,d0.w),a2
  40.     move.l    a2,(a4)+    * 実行アドレス
  41.  
  42.     addq.w    #1,d6
  43.     addq.w    #2,d3
  44.     addq.l    #1,a5        * $00
  45.  
  46.     tst.b    (a5)
  47.     bne    kofunc_init_loop
  48.  
  49.  
  50.  * こ-標準関数の初期化処理
  51.     *move.w    #-1,strtok_work
  52.  
  53.  
  54.     move.w    (sp)+,d5
  55.     rts
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65. ptr_token:
  66.     .dc.b    'WindowOpen',0
  67.     .dc.b    'WindowSimpleOpen',0
  68.     .dc.b    'WindowTitleOpen',0
  69.     .dc.b    'WindowScrollOpen',0
  70.     .dc.b    'WindowClose',0
  71.     .dc.b    'WindowPop',0
  72.     .dc.b    'WindowPush',0
  73.     .dc.b    'WindowRedraw',0
  74.     .dc.b    'WindowMove',0
  75.     .dc.b    'WindowResize',0
  76.     .dc.b    'WindowMoveOperation',0
  77.     .dc.b    'WindowResizeOperation',0
  78.     .dc.b    'WindowGetPosition',0
  79.     .dc.b    'WindowGetSize',0
  80.  
  81.     .dc.b    'WindowLoadExec',0
  82.     .dc.b    'UserSendExec',0
  83.     .dc.b    'PopUpMenu',0
  84.     .dc.b    'IconEnt',0
  85.     .dc.b    'SendUserString',0
  86.     .dc.b    'SendUserSheet',0
  87.     .dc.b    'SendUserGraphic',0
  88.     .dc.b    'GetUserString',0
  89.     .dc.b    'GetUserSheet',0
  90.     .dc.b    'GetUserGraphic',0
  91.  
  92.     .dc.b    'DrawClear',0
  93.     .dc.b    'DrawLine',0
  94.     .dc.b    'DrawBox',0
  95.     .dc.b    'DrawFill',0
  96.     .dc.b    'DrawShadow',0
  97.     .dc.b    'DrawPut',0
  98.     .dc.b    'DrawSymbol',0
  99.     .dc.b    'GraphicInit',0
  100.     .dc.b    'DrawGraphicClear',0
  101.     .dc.b    'DrawGraphicLine',0
  102.     .dc.b    'DrawGraphicBox',0
  103.     .dc.b    'DrawGraphicFill',0
  104.     .dc.b    'DrawGraphicShadow',0
  105.     .dc.b    'DrawGraphicPut',0
  106.  
  107.     .dc.b    'TrumpOpen',0
  108.     .dc.b    'JpaiOpen',0
  109.     .dc.b    'TrumpClose',0
  110.     .dc.b    'JpaiClose',0
  111.     .dc.b    'DrawCard',0
  112.     .dc.b    'DrawMonoCard',0
  113.  
  114.     .dc.b    'IntervalTime',0
  115.     .dc.b    0
  116.     .even
  117.  
  118.  
  119.  
  120. ptr_param:
  121. pp:
  122.     .dc.w    p_WindowOpen-pp
  123.     .dc.w    p_WindowSimpleOpen-pp
  124.     .dc.w    p_WindowTitleOpen-pp
  125.     .dc.w    p_WindowScrollOpen-pp
  126.     .dc.w    p_WindowClose-pp
  127.     .dc.w    p_WindowPop-pp
  128.     .dc.w    p_WindowPush-pp
  129.     .dc.w    p_WindowRedraw-pp
  130.     .dc.w    p_WindowMove-pp
  131.     .dc.w    p_WindowResize-pp
  132.     .dc.w    p_WindowMoveOperation-pp
  133.     .dc.w    p_WindowResizeOperation-pp
  134.     .dc.w    p_WindowGetPosition-pp
  135.     .dc.w    p_WindowGetSize-pp
  136.  
  137.     .dc.w    p_WindowLoadExec-pp
  138.     .dc.w    p_UserSendExec-pp
  139.     .dc.w    p_PopUpMenu-pp
  140.     .dc.w    p_IconEnt-pp
  141.     .dc.w    p_SendUserString-pp
  142.     .dc.w    p_SendUserSheet-pp
  143.     .dc.w    p_SendUserGraphic-pp
  144.     .dc.w    p_GetUserString-pp
  145.     .dc.w    p_GetUserSheet-pp
  146.     .dc.w    p_GetUserGraphic-pp
  147.  
  148.     .dc.w    p_DrawClear-pp
  149.     .dc.w    p_DrawLine-pp
  150.     .dc.w    p_DrawBox-pp
  151.     .dc.w    p_DrawFill-pp
  152.     .dc.w    p_DrawShadow-pp
  153.     .dc.w    p_DrawPut-pp
  154.     .dc.w    p_DrawSymbol-pp
  155.     .dc.w    p_GraphicInit-pp
  156.     .dc.w    p_DrawGraphicClear-pp
  157.     .dc.w    p_DrawGraphicLine-pp
  158.     .dc.w    p_DrawGraphicBox-pp
  159.     .dc.w    p_DrawGraphicFill-pp
  160.     .dc.w    p_DrawGraphicShadow-pp
  161.     .dc.w    p_DrawGraphicPut-pp
  162.     .dc.w    p_TrumpOpen-pp
  163.     .dc.w    p_JpaiOpen-pp
  164.     .dc.w    p_TrumpClose-pp
  165.     .dc.w    p_JpaiClose-pp
  166.     .dc.w    p_DrawCard-pp
  167.     .dc.w    p_DrawMonoCard-pp
  168.     .dc.w    p_IntervalTime-pp
  169. ptr_exec:
  170. pe:
  171.     .dc.w    WindowOpen-pe
  172.     .dc.w    WindowSimpleOpen-pe
  173.     .dc.w    WindowTitleOpen-pe
  174.     .dc.w    WindowScrollOpen-pe
  175.     .dc.w    WindowClose-pe
  176.     .dc.w    WindowPop-pe
  177.     .dc.w    WindowPush-pe
  178.     .dc.w    WindowRedraw-pe
  179.     .dc.w    WindowMove-pe
  180.     .dc.w    WindowResize-pe
  181.     .dc.w    WindowMoveOperation-pe
  182.     .dc.w    WindowResizeOperation-pe
  183.     .dc.w    WindowGetPosition-pe
  184.     .dc.w    WindowGetSize-pe
  185.  
  186.     .dc.w    WindowLoadExec-pe
  187.     .dc.w    UserSendExec-pe
  188.     .dc.w    PopUpMenu-pe
  189.     .dc.w    IconEnt-pe
  190.     .dc.w    SendUserString-pe
  191.     .dc.w    SendUserSheet-pe
  192.     .dc.w    SendUserGraphic-pe
  193.     .dc.w    GetUserString-pe
  194.     .dc.w    GetUserSheet-pe
  195.     .dc.w    GetUserGraphic-pe
  196.  
  197.     .dc.w    DrawClear-pe
  198.     .dc.w    DrawLine-pe
  199.     .dc.w    DrawBox-pe
  200.     .dc.w    DrawFill-pe
  201.     .dc.w    DrawShadow-pe
  202.     .dc.w    DrawPut-pe
  203.     .dc.w    DrawSymbol-pe
  204.     .dc.w    GraphicInit-pe
  205.     .dc.w    DrawGraphicClear-pe
  206.     .dc.w    DrawGraphicLine-pe
  207.     .dc.w    DrawGraphicBox-pe
  208.     .dc.w    DrawGraphicFill-pe
  209.     .dc.w    DrawGraphicShadow-pe
  210.     .dc.w    DrawGraphicPut-pe
  211.     .dc.w    TrumpOpen-pe
  212.     .dc.w    JpaiOpen-pe
  213.     .dc.w    TrumpClose-pe
  214.     .dc.w    JpaiClose-pe
  215.     .dc.w    DrawCard-pe
  216.     .dc.w    DrawMonoCard-pe
  217.     .dc.w    IntervalTime-pe
  218.  
  219.  
  220.  
  221.  
  222.  
  223. *-------------------
  224.  
  225.  
  226. p_WindowOpen:
  227. p_WindowSimpleOpen:
  228.     .dc.w    int_val        * WindowNumber
  229.     .dc.w    int_val        * x
  230.     .dc.w    int_val        * y
  231.     .dc.w    int_val        * h
  232.     .dc.w    int_val        * v
  233.     .dc.w    int_omt        * ParentWindowNumber
  234.     .dc.w    int_ret        *** WindowNumber
  235. p_WindowTitleOpen:
  236.     .dc.w    int_val        * WindowNumber
  237.     .dc.w    int_val        * x
  238.     .dc.w    int_val        * y
  239.     .dc.w    int_val        * h
  240.     .dc.w    int_val        * v
  241.     .dc.w    int_omt        * ParentWindowNumber
  242.     .dc.w    str_val        * label(WindowName)
  243.     .dc.w    int_val        * option
  244.     .dc.w    int_ret        *** WindowNumber
  245. p_WindowScrollOpen:
  246.     .dc.w    void_ret
  247. p_WindowClose:
  248. p_WindowPop:
  249. p_WindowPush:
  250. p_WindowRedraw:
  251.     .dc.w    int_val        * WindowNumber
  252.     .dc.w    int_ret        *** error code
  253. p_WindowMove:
  254.     .dc.w    int_val        * WindowNumber
  255.     .dc.w    int_val        * x
  256.     .dc.w    int_val        * y
  257.     .dc.w    int_ret        *** error code
  258. p_WindowResize:
  259.     .dc.w    int_val        * WindowNumber
  260.     .dc.w    int_val        * x
  261.     .dc.w    int_val        * y
  262.     .dc.w    int_val        * h
  263.     .dc.w    int_val        * v
  264.     .dc.w    int_ret        *** error code
  265. p_WindowMoveOperation:
  266. p_WindowResizeOperation:
  267.     .dc.w    void_ret
  268. p_WindowGetPosition:
  269. p_WindowGetSize:
  270.     .dc.w    int_val        * WindowNumber
  271.     .dc.w    int_vp        * xp/hp
  272.     .dc.w    int_vp        * yp/vp
  273.     .dc.w    int_ret        *** error code
  274.  
  275.  
  276. p_WindowLoadExec:
  277.     .dc.w    str_val
  278.     .dc.w    str_omt
  279.     .dc.w    int_omt
  280.     .dc.w    int_ret
  281. p_UserSendExec:
  282.     .dc.w    str_val
  283.     .dc.w    str_omt
  284.     .dc.w    str_omt
  285.     .dc.w    int_ret
  286. p_PopUpMenu:
  287.     .dc.w    int_val        * x
  288.     .dc.w    int_val        * y
  289.     .dc.w    $0038        * item(ary1_s)
  290.     .dc.w    int_omt        * {items}
  291.     .dc.w    int_omt        * {font=12}
  292.     .dc.w    int_ret
  293. p_IconEnt:
  294.     .dc.w    int_val        * WindowNumber
  295.     .dc.w    str_val        * icon title
  296.     .dc.w    int_omt        * attribute of icon title
  297.     .dc.w    int_omt        * font size of icon title
  298.     .dc.w    int_ret        *** error code
  299. p_SendUserString:
  300.     .dc.w    str_val
  301.     .dc.w    void_ret
  302. p_SendUserSheet:
  303.     .dc.w    int_val
  304.     .dc.w    int_val
  305.     .dc.w    ary1_c
  306.     .dc.w    ary1_c
  307.     .dc.w    void_ret
  308. p_SendUserGraphic:
  309.     .dc.w    int_val
  310.     .dc.w    int_val
  311.     .dc.w    $0036        * graph ( ary1_ic )
  312.     .dc.w    void_ret
  313.  
  314. p_GetUserString:
  315.     .dc.w    str_vp
  316.     .dc.w    void_ret
  317. p_GetUserSheet:
  318.     .dc.w    int_vp
  319.     .dc.w    int_vp
  320.     .dc.w    ary1_c
  321.     .dc.w    ary1_c
  322.     .dc.w    void_ret
  323. p_GetUserGraphic:
  324.     .dc.w    int_vp
  325.     .dc.w    int_vp
  326.     .dc.w    $0036        * graph ( ary1_ic )
  327.     .dc.w    void_ret
  328.  
  329.  
  330. p_DrawSymbol:
  331.     .dc.w    int_val        * WindowNumber
  332.     .dc.w    int_val        * x
  333.     .dc.w    int_val        * y
  334.     .dc.w    str_val        * 表示文字列
  335.     .dc.w    int_omt        * 属性
  336.     .dc.w    int_omt        * font
  337.     .dc.w    int_ret        *** error code
  338.  
  339. p_DrawPut:
  340.     .dc.w    int_val        * WindowNumber
  341.     .dc.w    int_val        * x
  342.     .dc.w    int_val        * y
  343.     .dc.w    int_val        * x_size
  344.     .dc.w    int_val        * y_size
  345.     .dc.w    ary1_c        * sheet1
  346.     .dc.w    ary1_c        * sheet2
  347.     .dc.w    void_ret
  348.  
  349.  
  350. p_DrawLine:
  351. p_DrawBox:
  352. p_DrawFill:
  353. p_DrawShadow:
  354.     .dc.w    int_val        * WindowNumber
  355.     .dc.w    int_val        * x1
  356.     .dc.w    int_val        * y1
  357.     .dc.w    int_val        * x2
  358.     .dc.w    int_val        * y2
  359.     .dc.w    int_val        * color
  360.     .dc.w    int_ret        *** error code
  361. p_DrawClear:
  362.     .dc.w    int_val        * WindowNumber
  363.     .dc.w    int_val        * color
  364.     .dc.w    int_ret        *** error code
  365.  
  366.  
  367.  
  368. p_GraphicInit:
  369.     .dc.w    int_val
  370.     .dc.w    int_val
  371.     .dc.w    $00b2    * 省略可能な int 配列
  372.     .dc.w    void_ret
  373. p_DrawGraphicClear:
  374.     .dc.w    int_val
  375.     .dc.w    int_val
  376.     .dc.w    int_ret
  377.  
  378. p_DrawGraphicLine:
  379. p_DrawGraphicBox:
  380. p_DrawGraphicFill:
  381. p_DrawGraphicShadow:
  382.     .dc.w    int_val        * WindowNumber
  383.     .dc.w    int_val        * x1
  384.     .dc.w    int_val        * y1
  385.     .dc.w    int_val        * x2
  386.     .dc.w    int_val        * y2
  387.     .dc.w    int_val        * color
  388.     .dc.w    int_ret        *** error code
  389.  
  390. p_DrawGraphicPut:
  391.     .dc.w    int_val        * WindowNumber
  392.     .dc.w    int_val        * x1
  393.     .dc.w    int_val        * y1
  394.     .dc.w    int_val        * x2
  395.     .dc.w    int_val        * y2
  396.     .dc.w    $0036        * graph ( ary1_ic )
  397.     .dc.w    int_omt        * offset
  398.     .dc.w    void_ret
  399.  
  400.  
  401.  
  402. p_TrumpOpen:
  403. p_JpaiOpen:
  404. p_TrumpClose:
  405. p_JpaiClose:
  406.     .dc.w    int_ret
  407. p_DrawCard:
  408. p_DrawMonoCard:
  409.     .dc.w    int_val        * WindowNumber
  410.     .dc.w    int_val        * x
  411.     .dc.w    int_val        * y
  412.     .dc.w    int_val        * card#
  413.     .dc.w    int_val        * card 種類
  414.     .dc.w    int_ret        *** error code
  415.  
  416.  
  417. p_IntervalTime:
  418.     .dc.w    int_ret
  419.  
  420. *-------------------
  421.  
  422.  
  423.  
  424. get_WindowID:
  425.     lea.l    _bwp,a0
  426.     lsl.w    #2,d0
  427.     move.l    (a0,d0.w),d0
  428.     rts
  429.  
  430.  
  431. open_sub:
  432.     lea.l    _bwp,a0
  433.     tst.l    d0        * WindowNumber
  434.     bmi    wnum探す
  435.     cmpi.w    #WINMAX,d0
  436.     bcc    cant_open
  437.     move.w    d0,d1
  438.     lsl.w    #2,d1
  439.     tst.l    (a0,d1.w)
  440.     beq    @f
  441. cant_open:
  442.     moveq    #-1,d0        * 空きがない
  443. @@:
  444.     rts
  445.  
  446. wnum探す:
  447.     moveq    #WINMAX-1,d1
  448. 2:
  449.     tst.l    (a0)+
  450.     dbeq    d1,2b
  451.     bne    cant_open
  452.     moveq    #WINMAX-1,d0
  453.     sub.w    d1,d0
  454.     rts
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461. *-------------------
  462.  
  463. WindowOpen:
  464.     move.l    par1+6(sp),d0        * WindowNumber
  465.     bsr    open_sub
  466.     move.l    d0,_WinNumber
  467.     bmi    return_minus
  468.     pea.l    _EventExec(pc)        * event
  469.     pea.l    0.w            * parentWindow ( ROOT )
  470.     move.l    par5+6+08(sp),-(sp)
  471.     move.l    par4+6+12(sp),-(sp)
  472.     move.l    par3+6+16(sp),-(sp)
  473.     move.l    par2+6+20(sp),-(sp)
  474.     bsr    _WindowOpen
  475.     lea.l    4*6(sp),sp
  476.     bra    Wopen共通
  477.  
  478. WindowSimpleOpen:
  479.     move.l    par1+6(sp),d0        * WindowNumber
  480.     bsr    open_sub
  481.     move.l    d0,_WinNumber
  482.     bmi    return_minus
  483.     pea.l    _EventExec(pc)        * event
  484.     pea.l    0.w            * parentWindow ( ROOT )
  485.     move.l    par5+6+08(sp),-(sp)
  486.     move.l    par4+6+12(sp),-(sp)
  487.     move.l    par3+6+16(sp),-(sp)
  488.     move.l    par2+6+20(sp),-(sp)
  489.     bsr    _WindowSimpleOpen
  490.     lea.l    4*6(sp),sp
  491.     bra    Wopen共通
  492.  
  493. WindowTitleOpen:
  494.     move.l    par1+6(sp),d0        * WindowNumber
  495.     bsr    open_sub
  496.     move.l    d0,_WinNumber
  497.     bmi    return_minus
  498.     pea.l    _EventExec(pc)        * event
  499.     move.l    par8+6+04(sp),-(sp)
  500.     move.l    par7+6+08(sp),-(sp)
  501.     pea.l    0.w            * parentWindow ( ROOT )
  502.     move.l    par5+6+16(sp),-(sp)
  503.     move.l    par4+6+20(sp),-(sp)
  504.     move.l    par3+6+24(sp),-(sp)
  505.     move.l    par2+6+28(sp),-(sp)
  506.     bsr    _WindowTitleOpen
  507.     lea.l    4*8(sp),sp
  508.  
  509. Wopen共通:
  510.         *KH    'WindowID = ',d0
  511.     move.l    #Eattr,d1
  512.     move.l    _WinNumber(pc),d2
  513.     bne    @f
  514.     bset    #Einterval,d1        * ウィンドウ#0 のみ interval event 起きる
  515. @@:
  516.     movem.l    d0/d1,-(sp)
  517.     bsr    _WindowSetEventAttr
  518.     addq.l    #8,sp
  519.     bra    return_WinNumber
  520.  
  521.  
  522.  
  523. WindowClose:
  524.     move.l    par1+6(sp),d0        * WindowNumber
  525.     lea.l    _bwp,a0
  526.     lsl.w    #2,d0
  527.     move.l    (a0,d0.w),d1
  528.     beq    return_minus
  529.     clr.l    (a0,d0.w)        * NULL
  530.     move.l    d1,-(sp)
  531.     bsr    _WindowClose
  532.     addq.l    #4,sp
  533.     bra    return_zero
  534.  
  535. WindowPop:
  536.     move.l    par1+6(sp),d0        * WindowNumber
  537.     bsr    get_WindowID
  538.     tst.l    d0
  539.     beq    return_minus
  540.     move.l    d0,-(sp)
  541.     bsr    _WindowPop
  542.     addq.l    #4,sp
  543.     bra    return_zero
  544. WindowPush:
  545.     move.l    par1+6(sp),d0        * WindowNumber
  546.     bsr    get_WindowID
  547.     tst.l    d0
  548.     beq    return_minus
  549.     move.l    d0,-(sp)
  550.     bsr    _WindowPush
  551.     addq.l    #4,sp
  552.     bra    return_zero
  553. WindowRedraw:
  554.     move.l    par1+6(sp),d0        * WindowNumber
  555.     bsr    get_WindowID
  556.     tst.l    d0
  557.     beq    return_minus
  558.     move.l    d0,-(sp)
  559.     bsr    _WindowRedraw
  560.     addq.l    #4,sp
  561.     bra    return_zero
  562.  
  563. WindowMove:
  564.     move.l    par1+6(sp),d0        * WindowNumber
  565.     bsr    get_WindowID
  566.     tst.l    d0
  567.     beq    return_minus
  568.     move.l    par3+6+0(sp),-(sp)
  569.     move.l    par2+6+4(sp),-(sp)
  570.     move.l    d0,-(sp)
  571.     bsr    _WindowRedraw
  572.     lea.l    4*3(sp),sp
  573.     bra    return_zero
  574.  
  575.  
  576. WindowResize:
  577.     move.l    par1+6(sp),d0        * WindowNumber
  578.     bsr    get_WindowID
  579.     tst.l    d0
  580.     beq    return_minus
  581.     move.l    par5+6+0(sp),-(sp)
  582.     move.l    par4+6+4(sp),-(sp)
  583.     move.l    par3+6+8(sp),-(sp)
  584.     move.l    par2+6+12(sp),-(sp)
  585.     move.l    d0,-(sp)
  586.     bsr    _WindowRedraw
  587.     lea.l    4*5(sp),sp
  588.     bra    return_zero
  589.  
  590.  
  591. WindowGetPosition:
  592.     move.l    par1+6(sp),d0        * WindowNumber
  593.     bsr    get_WindowID
  594.     tst.l    d0
  595.     beq    return_minus
  596.     move.l    par3+6+0(sp),-(sp)    * xp
  597.     move.l    par2+6+4(sp),-(sp)    * yp
  598.     move.l    d0,-(sp)
  599.     bsr    _WindowGetPosition
  600.     lea.l    4*3(sp),sp
  601.     bra    return_zero
  602.  
  603. WindowGetSize:
  604.     move.l    par1+6(sp),d0        * WindowNumber
  605.     bsr    get_WindowID
  606.     tst.l    d0
  607.     beq    return_minus
  608.     move.l    par3+6+0(sp),-(sp)    * hp
  609.     move.l    par2+6+4(sp),-(sp)    * vp
  610.     move.l    d0,-(sp)
  611.     bsr    _WindowGetSize
  612.     lea.l    4*3(sp),sp
  613.     bra    return_zero
  614.  
  615.  
  616.  
  617. WindowScrollOpen:
  618.     bra    return_zero
  619.  
  620.  
  621.  
  622. *-------------------
  623.  
  624.  
  625. WindowLoadExec:
  626.     movea.l    par1+6(sp),a0
  627.  
  628.     movea.l    par2+6(sp),a1
  629.     tst.w    par2(sp)
  630.     bge    @f
  631.     lea.l    use_null(pc),a1
  632. @@:
  633.  
  634.     suba.l    a2,a2        * 親の環境
  635.  
  636.     bsr    win_check
  637.     beq    win_exec
  638.         lea.l    _ConsoleChar(pc),a3
  639.         tst.w    par3(sp)
  640.         bmi    @f
  641.         move.l    par3+6(sp),d0
  642.         beq    run実行
  643.         cmpi.l    #3,d0
  644.         bcc    irregular_param
  645.         lsl.w    #2,d0
  646.         movea.l    win_char(pc,d0.w),a3
  647.     bra    @f
  648. win_char:
  649.     .dc.l    0        * run
  650.     .dc.l    _ConsoleChar    * Console
  651.     .dc.l    dummy_char    * dummy(出力無し)
  652.  
  653. win_exec:
  654.         suba.l    a3,a3
  655. @@:
  656.  
  657.     movem.l    a0-a3,-(sp)
  658.     bsr    _WindowLoadExec
  659.     lea.l    16(sp),sp
  660.     bra    return_d0
  661.  
  662. run実行:
  663.     suba.l    a3,a3
  664.     movem.l    a0-a3,-(sp)
  665.     bsr    _WindowScreenQuit
  666.     bsr    _WindowLoadExec
  667.     bsr    _WindowScreenInit
  668.     lea.l    16(sp),sp
  669.     bra    return_d0
  670.  
  671.  
  672.  
  673. win_check:
  674.     movea.l    a0,a4
  675. @@:
  676.     tst.b    (a4)+
  677.     bne    @b
  678.     subq.l    #5,a4    * .win0^
  679.  
  680.     lea.l    _win(pc),a5
  681.     moveq    #3,d1
  682. @@:
  683.         moveq    #$20,d0
  684.         or.b    (a4)+,d0
  685.         cmp.b    (a5)+,d0
  686.         dbne    d1,@b
  687. wc_rts:
  688. dummy_char:
  689.     rts
  690. _win:
  691.     .dc.b    '.win'
  692.     .even
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699. UserSendExec:
  700.     movea.l    par1+6(sp),a0
  701.     movea.l    par2+6(sp),a1
  702.     tst.w    par2(sp)
  703.     bge    @f
  704.     lea.l    use_null(pc),a1
  705. @@:
  706.     movea.l    par3+6(sp),a2
  707.     tst.w    par3(sp)
  708.     bge    @f
  709.     lea.l    use_null(pc),a2
  710. @@:
  711.     movem.l    a0-a2,-(sp)
  712.     bsr    _UserSendExec
  713.     lea.l    12(sp),sp
  714.     bra    return_d0
  715. use_null:
  716.     .dc.b    0
  717.     .even
  718.  
  719.  
  720.  
  721.  
  722.  
  723. *-------------------
  724.  
  725. PopUpMenu:
  726.     move.l    par1+6(sp),d1    * x
  727.     move.l    par2+6(sp),d2    * y
  728.     move.l    par3+6(sp),a1    * item
  729.     addq.l    #6,a1
  730.     moveq    #0,d6
  731.     moveq    #0,d7
  732.     movem.w    (a1)+,d6/d7    * size/num of item
  733.     addq.l    #1,d7
  734.  
  735.     tst.w    par4(sp)
  736.     bge    @f
  737.         move.l    d7,d4
  738.         bra    1f
  739. @@:
  740.         move.l    par4+6(sp),d4
  741.         ble    irregular_param
  742.         cmp.l    d7,d4
  743.         bhi    irregular_param
  744. 1:
  745.  
  746.     moveq    #12,d5
  747.     tst.w    par5(sp)
  748.     bmi    @f
  749.         move.l    par5+6(sp),d5
  750. @@:
  751.  
  752.     move.l    sp,d7    * 保存
  753.  
  754.     move.l    d4,d0
  755.     lsl.l    #2,d0
  756.     suba.l    d0,sp
  757.     movea.l    sp,a0
  758.     move.l    d4,d0
  759.     subq.w    #1,d0
  760. @@:
  761.         move.l    a1,(a0)+
  762.         adda.l    d6,a1
  763.     dbra    d0,@b
  764.     move.l    sp,d3
  765.  
  766.     movem.l    d1-d5,-(sp)
  767.     bsr    _PopUpMenu
  768.  
  769.     movea.l    d7,sp        * 復帰
  770.     bra    return_d0
  771.  
  772. *-----------------
  773.  
  774. IconEnt:
  775.     move.l    par1+6(sp),d0        * WindowNumber
  776.     bsr    get_WindowID
  777.     tst.l    d0
  778.     beq    return_minus
  779.     move.l    par2+6(sp),d1        * icon title
  780.  
  781.     moveq    #9,d2
  782.     tst.w    par3(sp)
  783.     bmi    ie1
  784.         move.l    par3+6(sp),d2        * attribute of title
  785. ie1:
  786.     moveq    #16,d3
  787.     tst.w    par4(sp)
  788.     bmi    ie2
  789.         move.l    par4+6(sp),d3        * font size of title
  790. ie2:
  791.     movem.l    d0-d3,-(sp)
  792.     bsr    _IconEnt
  793.     lea.l    4*4(sp),sp
  794.     bra    return_zero
  795.  
  796.  
  797.  
  798. *-----------------
  799. WindowMoveOperation:
  800.     move.l    func参照sysvar,d0    * info_?? の先頭
  801.     beq    GetSendはE関数内で
  802.     move.l    d0,-(sp)
  803.     move.l    _WinID(pc),-(sp)
  804.     bsr    _WindowMoveOperation
  805.     addq.l    #8,sp
  806.     bra    return_zero
  807.  
  808. WindowResizeOperation:
  809.     move.l    func参照sysvar,d0    * info_?? の先頭
  810.     beq    GetSendはE関数内で
  811.     move.l    d0,-(sp)
  812.     move.l    _WinID(pc),-(sp)
  813.     bsr    _WindowResizeOperation
  814.     addq.l    #8,sp
  815.     bra    return_zero
  816.  
  817.  
  818. *-----------------
  819.  
  820. SendUserString:
  821.     move.l    par1+6(sp),-(sp)
  822.     pea.l    UserString.w
  823.     bra    senduser共通
  824.  
  825. SendUserSheet:
  826.     lea.l    par1+6(sp),a0
  827.     bsr    make_sheet_a1
  828.     bmi    配列小さ過ぎ
  829.     move.l    a1,-(sp)
  830.     pea.l    UserSheet.w
  831.     bra    senduser共通
  832.  
  833. SendUserGraphic:
  834.     move.l    par1+6(sp),d1        * h
  835.     move.l    par2+6(sp),d2        * v
  836.     move.l    par3+6(sp),a1        * graph
  837.  
  838.     moveq    #0,d3
  839.     move.w    graph(pc),d3    * color mode
  840.  
  841.     addq.l    #6,a1
  842.     movem.w    (a1)+,d6/d7    * 項サイズ/添え字最大
  843.     addq.w    #1,d7
  844.     bcc    1f
  845.         moveq    #0,d7        * 添え字数=65535 の時は
  846.         move.w    d6,d7
  847.         swap    d7        * 特別に $10000 倍
  848.         bra    @f
  849. 1:
  850.         mulu.w    d6,d7        * 配列 byte 数
  851. @@:
  852.     move.l    a1,d4        * &graph
  853.     move.l    8+graph(pc),d5    * &palet
  854.     lea.l    _Ugraph(pc),a0
  855.     movem.l    d1-d5,(a0)
  856.  
  857.     addq.w    #1,d1
  858.     addq.w    #1,d2
  859.     mulu.w    d1,d2
  860.     moveq.l    #WindowAttrGraphic65536,d1
  861.     cmp.w    d4,d1
  862.     bne    @f
  863.         add.l    d2,d2    * 65536 mode はワード単位
  864. @@:
  865.     cmp.l    d2,d7
  866.     bcs    配列小さ過ぎ
  867.  
  868.     move.l    a0,-(sp)
  869.     pea.l    UserGraphic.w
  870.     *bra    senduser共通
  871.  
  872. senduser共通:
  873. *    pea.l    global_info(pc)
  874.     move.l    func参照sysvar,d0
  875.     beq    GetSendはE関数内で
  876.     move.l    d0,-(sp)
  877.     move.l    _WinID(pc),-(sp)
  878.     bsr    _UserSendOperation
  879.     lea.l    16(sp),sp
  880.     bra    return_zero
  881.  
  882. _Ugraph:
  883.     .dc.l    0    * h
  884.     .dc.l    0    * v
  885.     .dc.l    0    * color
  886.     .dc.l    0    * &graphic
  887.     .dc.l    0    * &palet
  888.  
  889. get_comdata_buffer:
  890.     move.l    func参照sysvar,d0
  891.     beq    @f
  892.     movea.l    d0,a0
  893.     movem.l    15*4(a0),d0/a0        * ComData & Buffer
  894.     rts
  895. @@:
  896.     moveq    #-1,d0
  897.     rts
  898.  
  899. GetUserString:
  900.     bsr    get_comdata_buffer
  901.     *    KH    ' ComData = ',d0
  902.     tst.l    d0
  903.     bmi    GetSendはE関数内で
  904.     subq.l    #UserStrings,d0
  905.     bhi    転送データ違う
  906.     bne    @f
  907.         movea.l    (a0),a0
  908. @@:
  909.  
  910.     movea.l    par1+6(sp),a1
  911.     move.w    #$ff,d0
  912. @@:
  913.     move.b    (a0)+,(a1)+
  914.     dbeq    d0,@b
  915.     clr.b    (a1)
  916.     bra    return_zero
  917.  
  918. GetUserSheet:
  919.     bsr    get_comdata_buffer
  920.     tst.l    d0
  921.     bmi    GetSendはE関数内で
  922.     subq.l    #UserSheet,d0
  923.     bne    転送データ違う
  924.  
  925.     movea.l    par1+6(sp),a1        * &h
  926.     move.l    (a0)+,(a1)
  927.     movea.l    par2+6(sp),a1        * &v
  928.     move.l    (a0)+,d3
  929.     move.l    d3,(a1)
  930.     move.l    (a0)+,d2        * hsize
  931.     mulu.w    d3,d2            * sheet size (word)
  932.  
  933.     movea.l    par3+6(sp),a1
  934.     bsr    get_sheet_sub
  935.     bcs    配列小さ過ぎ
  936.     movea.l    par4+6(sp),a1
  937.     bsr    get_sheet_sub
  938.     bcs    配列小さ過ぎ
  939.  
  940.     bra    return_zero
  941.  
  942. get_sheet_sub:
  943.     addq.l    #6,a1
  944.     movem.w    (a1)+,d0/d1
  945.     addq.w    #1,d1
  946.     mulu.w    d1,d0        * 配列 byte 数
  947.     lsr.l    #1,d0
  948.     cmp.l    d2,d0
  949.     bcs    9f
  950.         movea.l    (a0)+,a2
  951.         move.l    d2,d0
  952.     @@:
  953.         move.w    (a2)+,(a1)+
  954.         subq.l    #1,d0
  955.         bgt    @b
  956. 9:
  957.     rts
  958.  
  959.  
  960. GetUserGraphic:
  961.     bsr    get_comdata_buffer
  962.     tst.l    d0
  963.     bmi    GetSendはE関数内で
  964.     subq.l    #UserGraphic,d0
  965.     bne    転送データ違う
  966.  
  967.     movea.l    par1+6(sp),a1        * &h
  968.     move.l    (a0)+,d2
  969.     move.l    d2,(a1)
  970.     movea.l    par2+6(sp),a1        * &v
  971.     move.l    (a0)+,d3
  972.     move.l    d3,(a1)
  973.     mulu.w    d3,d2            * graphic size
  974.  
  975.     move.l    (a0)+,d3        * Attr
  976.     movea.l    (a0)+,a2        * graph
  977.  
  978.     cmpi.w    #WindowAttrGraphic65536,d3
  979.     bne    1f
  980.         add.l    d2,d2        * graphic size (byte)
  981.         suba.l    a1,a1
  982.         bra    2f
  983. 1:
  984.         movea.l    (a0)+,a1    * palet
  985.         move.l    a1,d0
  986.         ble    2f
  987.         lea.l    gra_palet,a0
  988.         moveq    #16/4-1,d1
  989.         cmpi.w    #WindowAttrGraphic16,d3
  990.         beq    @f
  991.         moveq    #256/4-1,d1
  992.     @@:
  993.         move.l    (a1)+,(a0)+
  994.         dbra    d1,@b
  995.         lea.l    gra_palet,a1
  996. 2:
  997.     movea.l    par3+6(sp),a0
  998.     addq.l    #6,a0
  999.     movem.w    (a0)+,d6/d7
  1000.     addq.w    #1,d7
  1001.     bcc    1f            * H9/3/5
  1002.         moveq    #0,d7        * 添え字数=65535 の時は
  1003.         move.w    d6,d7
  1004.         swap    d7        * 特別に $10000 倍
  1005.         bra    2f
  1006. 1:
  1007.         mulu.w    d6,d7        * 配列 byte 数
  1008. 2:
  1009.     cmp.l    d2,d7
  1010.     bcs    配列小さ過ぎ
  1011. @@:
  1012.     move.b    (a2)+,(a0)+
  1013.     subq.l    #1,d2
  1014.     bgt    @b
  1015.  
  1016.     move.l    a1,d0
  1017.     ble    return_zero
  1018.     move.l    a1,-(sp)        * palet
  1019.     pea.l    _DefGraphicSleep(pc)
  1020.     move.l    d3,-(sp)        * WindowSetAttr兼
  1021.     pea.l    graph(pc)
  1022.     bsr    _DefGraphicInit
  1023.     lea.l    16(sp),sp
  1024.  
  1025.     bra    return_zero
  1026.  
  1027.  
  1028.  
  1029.  
  1030. *-----------------
  1031.  
  1032.  
  1033.  
  1034.  
  1035.  
  1036.  
  1037.  
  1038. DrawClear:
  1039.     move.l    par1+6(sp),d0        * WindowNumber
  1040.     bsr    get_WindowID
  1041.     tst.l    d0
  1042.     beq    return_minus
  1043.  
  1044.     lea.l    DrawBuf(pc),a0
  1045.     moveq.l    #DClear,d1
  1046.     move.l    par2+6(sp),d2        * color
  1047.     movem.l    d1/d2,(a0)
  1048.     bra    draw共通
  1049.  
  1050.  
  1051. DrawPut:
  1052.     move.l    par1+6(sp),d0        * WindowNumber
  1053.     bsr    get_WindowID
  1054.     tst.l    d0
  1055.     beq    return_minus
  1056.  
  1057.     moveq    #DPut,d1
  1058.     move.l    par2+6(sp),d2    * x
  1059.     move.l    par3+6(sp),d3    * y
  1060.  
  1061.     lea.l    par4+6(sp),a0
  1062.     bsr    make_sheet_a1
  1063.     bmi    配列小さ過ぎ
  1064.  
  1065.     lea.l    DrawBuf(pc),a0
  1066.     movem.l    d1/d2/d3/a1,(a0)
  1067.     bra    draw共通
  1068.  
  1069.  
  1070. sheet_sub:
  1071.     addq.l    #8,a2
  1072.     cmp.w    (a2)+,d6
  1073.     bhi    @f
  1074.     move.l    a2,(a1)+
  1075.     rts
  1076. @@:
  1077.     moveq    #-1,d0
  1078.     rts
  1079.  
  1080.  
  1081.  
  1082. make_sheet_a1:
  1083.     movem.l    d4-d6/a2,-(sp)
  1084.  
  1085.     move.l    (a0),d4    * x_size
  1086.     moveq    #15,d6
  1087.     add.l    d4,d6
  1088.     lsr.l    #4,d6        * hword
  1089.     move.l    10(a0),d5    * v
  1090.  
  1091.     lea.l    SheetBuf(pc),a1
  1092.     movem.l    d4/d5/d6,(a1)
  1093.     lea.l    12(a1),a1
  1094.     mulu.w    d5,d6
  1095.     lsl.w    #1,d6
  1096.     subq.w    #1,d6        * 必要バイト数
  1097.  
  1098.     movea.l    20(a0),a2    * sheet1
  1099.     bsr    sheet_sub
  1100.     bmi    @f
  1101.     movea.l    30(a0),a2    * sheet2
  1102.     bsr    sheet_sub
  1103.     bmi    @f
  1104.     lea.l    SheetBuf(pc),a1
  1105. @@:
  1106.     movem.l    (sp)+,d4-d6/a2    * flag 変化せず
  1107.     rts
  1108. SheetBuf:
  1109.     .ds.l    5
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115. DrawLine:
  1116.     moveq    #OptionLine,d1
  1117.     bra    DrawLine共通
  1118. DrawBox:
  1119.     moveq    #OptionBox,d1
  1120.     bra    DrawLine共通
  1121. DrawFill:
  1122.     moveq    #OptionFill,d1
  1123.     bra    DrawLine共通
  1124. DrawShadow:
  1125.     moveq    #OptionShadow,d1
  1126.  
  1127. DrawLine共通:
  1128.     moveq    #DLine,d2
  1129. Line共通:
  1130.     move.l    par1+6(sp),d0        * WindowNumber
  1131.     bsr    get_WindowID
  1132.     tst.l    d0
  1133.     beq    return_minus
  1134.  
  1135.     lea.l    DrawBuf(pc),a0
  1136.     move.l    d2,(a0)+
  1137.     move.l    par2+6(sp),(a0)+    * x1
  1138.     move.l    par3+6(sp),(a0)+    * y1
  1139.     move.l    par4+6(sp),(a0)+    * x2
  1140.     move.l    par5+6(sp),(a0)+    * y2
  1141.     move.l    par6+6(sp),(a0)+    * color
  1142.     move.l    d1,(a0)
  1143.     lea.l    DrawBuf(pc),a0
  1144.     bra    draw共通
  1145.  
  1146.  
  1147. DrawSymbol:
  1148.     move.l    par1+6(sp),d0        * WindowNumber
  1149.     bsr    get_WindowID
  1150.     tst.l    d0
  1151.     beq    return_minus
  1152.  
  1153.     pea.l    1.w
  1154.     lea.l    DrawBuf(pc),a0
  1155.     move.l    a0,-(sp)
  1156.     move.l    #DSymbol,(a0)+
  1157.     move.l    par2+6+8(sp),(a0)+    * x
  1158.     move.l    par3+6+8(sp),(a0)+    * y
  1159.     move.l    par4+6+8(sp),(a0)+    * str
  1160.  
  1161.     moveq    #9,d1            * default attr.
  1162.     tst.w    par5+0+8(sp)
  1163.     bmi    @f
  1164.         move.l    par5+6+8(sp),d1
  1165. @@:    move.l    d1,(a0)+        * attr
  1166.  
  1167.     moveq    #16,d1
  1168.     tst.w    par6+0+8(sp)
  1169.     bmi    @f
  1170.         move.l    par6+6+8(sp),d1
  1171. @@:    move.l    d1,(a0)+        * font
  1172.  
  1173.     move.l    d0,-(sp)
  1174.     bsr    _WindowDraw
  1175.     lea.l    4*3(sp),sp
  1176.     bra    return_zero
  1177.  
  1178.  
  1179.  
  1180. DrawBuf:
  1181.     .ds.b    28
  1182.  
  1183.  
  1184. *-------------------
  1185.  
  1186. WindowAttrGraphic16    equ    4    * 16色モード
  1187. WindowAttrGraphic256    equ    8    * 256色モード
  1188. WindowAttrGraphic65536    equ    12    * 65536色モード
  1189.  
  1190. GraphicInit:
  1191.     move.l    par1+6(sp),d0        * WindowNumber
  1192.     bsr    get_WindowID
  1193.     move.l    d0,d3
  1194.     beq    return_minus
  1195.  
  1196.     move.l    par2+6(sp),d2
  1197.  
  1198.     moveq.l    #WindowAttrGraphic16,d1
  1199.     cmpi.l    #16,d2
  1200.     beq    @f
  1201.     moveq.l    #WindowAttrGraphic256,d1
  1202.     cmpi.l    #256,d2
  1203.     beq    @f
  1204.     moveq.l    #WindowAttrGraphic65536,d1
  1205.     cmpi.l    #65536,d2
  1206.     bne    irregular_param
  1207. @@:
  1208.  
  1209.     moveq    #-1,d0
  1210.     movea.l    d0,a1
  1211.     tst.w    par3(sp)
  1212.     bmi    @f
  1213.         movea.l    par3+6(sp),a0
  1214.         lea.l    gra_palet,a1
  1215.         addq.l    #8,a0
  1216.         move.w    (a0)+,d0
  1217.         cmpi.w    #$0100,d0
  1218.         bcs    1f
  1219.             move.w    #$00ff,d0
  1220.     1:
  1221.         addq.l    #2,a0
  1222.         move.w    (a0)+,(a1)+
  1223.         dbra    d0,1b
  1224.         lea.l    gra_palet,a1
  1225. @@:
  1226.     move.l    a1,-(sp)
  1227.     pea.l    _DefGraphicSleep(pc)
  1228.     move.l    d1,-(sp)        * WindowSetAttr兼
  1229.     pea.l    graph(pc)
  1230.     bsr    _DefGraphicInit
  1231.     bsr    _DefGraphicPalet
  1232.     move.l    d3,(sp)
  1233.     bsr    _WindowSetAttr
  1234.     lea.l    16(sp),sp
  1235.  
  1236. *        moveq    #0,d0            * 256色モードでパレットが設定されないバグを探してます
  1237. *        move.w    graph(pc),d0
  1238. *        KH    ' graph.mode = ',d0
  1239.     bra    return_zero
  1240.  
  1241.  
  1242.  
  1243.  
  1244. graphic_repalet::
  1245.     lea.l    graph(pc),a1
  1246.     tst.w    (a1)        * mode
  1247.     beq    @f
  1248.         move.l    a1,-(sp)
  1249.         bsr    _DefGraphicPalet
  1250.         addq.l    #4,sp
  1251. @@:
  1252.     rts
  1253.  
  1254. graphic_move::
  1255.     moveq    #0,d0
  1256.     lea.l    graph(pc),a1
  1257.     tst.w    (a1)        * mode
  1258.     beq    @f
  1259.         movem.l    4(sp),d0/a0            * WID/info
  1260.         movem.l    d0/a0,-(sp)
  1261.         move.l    a1,-(sp)
  1262.         bsr    _DefGraphicEnt
  1263.         lea.l    12(sp),sp
  1264. @@:
  1265.     rts
  1266. graph:
  1267.     .dc.w    0    * mode
  1268.     .dc.w    0    * sleep
  1269.     .dc.l    0    * *f_sleep()
  1270.     .dc.l    0    * *palet
  1271.  
  1272.     .bss
  1273. gra_palet:
  1274.     .ds.w    $100
  1275.     .text
  1276.  
  1277.  
  1278.  
  1279. DrawGraphicClear:
  1280.     move.l    par1+6(sp),d0        * WindowNumber
  1281.     bsr    get_WindowID
  1282.     tst.l    d0
  1283.     beq    return_minus
  1284.  
  1285.     moveq.l    #DGraphicClear,d1
  1286.     move.l    par2+6(sp),d2    * color
  1287.  
  1288.     lea.l    DrawBuf(pc),a0
  1289.     movem.l    d1/d2,(a0)
  1290.     bra    draw共通
  1291.  
  1292.  
  1293. DrawGraphicLine:
  1294.     moveq    #OptionLine,d1
  1295.     bra    @f
  1296. DrawGraphicBox:
  1297.     moveq    #OptionBox,d1
  1298.     bra    @f
  1299. DrawGraphicFill:
  1300.     moveq    #OptionFill,d1
  1301.     bra    @f
  1302. DrawGraphicShadow:
  1303.     moveq    #OptionShadow,d1
  1304. @@:
  1305.     moveq    #DGraphicLine,d2
  1306.     bra    Line共通
  1307.  
  1308.  
  1309. DrawGraphicPut:
  1310.     move.l    par1+6(sp),d0        * WindowNumber
  1311.     bsr    get_WindowID
  1312.     tst.l    d0
  1313.     beq    return_minus
  1314.  
  1315.     move.l    par2+6(sp),d2        * x1
  1316.     move.l    par3+6(sp),d3        * y1
  1317.     move.l    par4+6(sp),d4        * x2
  1318.     move.l    par5+6(sp),d5        * y2
  1319.     move.l    par6+6(sp),a1        * graph
  1320.  
  1321.     addq.l    #6,a1
  1322.     move.w    (a1)+,d6
  1323.     move.w    (a1)+,d7
  1324.     addq.w    #1,d7
  1325.     bcc    1f            * H9/3/7
  1326.         moveq    #0,d7        * 添え字数=65535 の時は
  1327.         move.w    d6,d7
  1328.         swap    d7        * 特別に $10000 倍
  1329.         bra    2f
  1330. 1:
  1331.         mulu.w    d6,d7        * 配列 byte 数
  1332. 2:
  1333.  
  1334.     tst.w    par7(sp)
  1335.     bmi    @f
  1336.         move.l    par7+6(sp),d6
  1337.         bclr.l    #0,d6
  1338.         bne    irregular_param
  1339.         adda.l    d6,a1
  1340.         sub.l    d6,d7
  1341.         bcs    配列小さ過ぎ
  1342. @@:
  1343.  
  1344.     lea.l    DrawBuf(pc),a0
  1345.     moveq.l    #DGraphicPut,d1
  1346.     movem.l    d1-d5/a1,(a0)
  1347.  
  1348.     sub.w    d2,d4
  1349.     sub.w    d3,d5
  1350.     addq.w    #1,d4
  1351.     addq.w    #1,d5
  1352.     mulu.w    d4,d5
  1353.     moveq.l    #WindowAttrGraphic65536,d1
  1354.     cmp.w    graph(pc),d1
  1355.     bne    @f
  1356.         add.l    d5,d5    * 65536 mode はワード単位
  1357. @@:
  1358.     cmp.l    d5,d7
  1359.     bcs    配列小さ過ぎ
  1360.     bra    draw共通
  1361.  
  1362.  
  1363. *-------------------
  1364.  
  1365.  
  1366. TrumpOpen:
  1367.     bsr    _TrumpOpen
  1368.     tst.l    d0
  1369.     bgt    return_d0
  1370.     bra    cardopenerr
  1371. JpaiOpen:
  1372.     bsr    _JpaiOpen
  1373.     tst.l    d0
  1374.     bgt    return_d0
  1375. cardopenerr:
  1376.     lea.l    _cardopenerrmes(pc),a1
  1377.     moveq    #10,d0
  1378.     bra    err共通
  1379. _cardopenerrmes:
  1380.     .dc.b    'カードがオープン出来ません。dbserv.win は組み込んでます?',0
  1381.     .even
  1382.  
  1383. TrumpClose:
  1384.     bsr    _TrumpClose
  1385.     bra    return_d0
  1386. JpaiClose:
  1387.     bsr    _JpaiClose
  1388.     bra    return_d0
  1389. DrawCard:
  1390.     move.l    par1+6(sp),d0        * WindowNumber
  1391.     bsr    get_WindowID
  1392.     tst.l    d0
  1393.     beq    return_minus
  1394.  
  1395.     move.l    par2+6(sp),d2        * x
  1396.     move.l    par3+6(sp),d3        * y
  1397.     move.l    par4+6(sp),d4        * card#
  1398.     movea.l    par5+6(sp),a2        * card種類
  1399.     movea.l    (a2),a2
  1400.     asl.l    #2,d4
  1401.     move.l    4(a2,d4.l),d4
  1402.     add.l    d4,d4
  1403.     adda.l    d4,a2
  1404.  
  1405.     move.l    d2,d4
  1406.     move.l    d3,d5
  1407.     add.w    (a2)+,d4    * xsize
  1408.     add.w    (a2)+,d5    * ysize
  1409.     subq.w    #1,d4
  1410.     subq.w    #1,d5
  1411.  
  1412.     lea.l    DrawBuf(pc),a0
  1413.     moveq.l    #DGraphicPut,d1
  1414.     movem.l    d1-d5/a2,(a0)
  1415.     bra    draw共通
  1416.  
  1417.  
  1418. DrawMonoCard:
  1419.     move.l    par2+6(sp),d2        * x
  1420.     move.l    par3+6(sp),d3        * y
  1421.     move.l    par4+6(sp),d4        * card#
  1422.     move.l    par5+6(sp),d5        * card種類
  1423.     movem.l    d2-d5,-(sp)
  1424.     pea.l    DrawBuf(pc)
  1425.     bsr    _CardDrawSetMono
  1426.     lea.l    4*5(sp),sp
  1427.  
  1428.     move.l    par1+6(sp),d0        * WindowNumber
  1429.     bsr    get_WindowID
  1430.     tst.l    d0
  1431.     beq    return_minus
  1432.  
  1433.     lea.l    DrawBuf(pc),a0
  1434.     bra    draw共通
  1435.  
  1436.  
  1437.  
  1438. *-------------------
  1439. draw共通:
  1440.     pea.l    1.w        * DrawBuf の要素数
  1441.     movem.l    d0/a0,-(sp)    * WindowID / DrawBuf
  1442.     bsr    _WindowDraw
  1443.     lea.l    4*3(sp),sp
  1444.     bra    return_zero
  1445. *-------------------
  1446.  
  1447. IntervalTime:
  1448.     IOCS    _ONTIME
  1449.     lsl.w    #8,d1
  1450.     swap.w    d1
  1451.     or.l    d1,d0
  1452.     bra    return_d0
  1453.  
  1454.  
  1455. *-------------------
  1456.  
  1457. return_zero:
  1458.     moveq.l    #0,d0
  1459.     lea.l    fac(pc),a0
  1460.     move.l    d0,6(a0)
  1461.     rts
  1462.  
  1463. return_WinNumber:
  1464.     move.l    _WinNumber(pc),d0
  1465.     bra    return_d0
  1466. file_end:
  1467.     tst.l    d0
  1468.     bge    return_d0
  1469. return_minus:
  1470.     moveq    #-1,d0
  1471. return_d0:
  1472.     lea.l    fac(pc),a0
  1473.     move.l    d0,6(a0)
  1474.     moveq.l    #0,d0
  1475.     rts
  1476.  
  1477. *-----------------------------
  1478.  
  1479.     .even
  1480. fac:
  1481.     .dc.w    0
  1482.     .dc.l    0
  1483.     .dc.l    0
  1484.  
  1485. *-----------------------------
  1486.  
  1487.  * 外部関数エラー
  1488.  
  1489. GetSendはE関数内で:
  1490.     lea.l    _GetSendはE関数内で(pc),a1
  1491.     moveq    #10,d0
  1492.     bra    1f
  1493. 転送データ違う:
  1494.     lea.l    _転送データ違う(pc),a1
  1495.     moveq    #9,d0
  1496.     bra    1f
  1497. 配列小さ過ぎ:
  1498.     lea.l    _配列小さ過ぎ(pc),a1
  1499.     moveq    #8,d0
  1500.     bra    1f
  1501. irregular_param:
  1502.     lea.l    _irregular_param(pc),a1
  1503.     moveq    #4,d0
  1504.     bra    1f
  1505. 無効な要素数:
  1506.     lea.l    _無効な要素数(pc),a1
  1507.     moveq    #6,d0
  1508. 1:
  1509. err共通:
  1510.     lea.l    fac(pc),a0
  1511.     moveq    #-1,d1        * error off の時の返り値
  1512.     move.l    d1,6(a0)
  1513.     rts
  1514.  
  1515. _転送データ違う:
  1516.     .dc.b    '転送されたデータの型が違いますです',0
  1517. _配列小さ過ぎ:
  1518.     .dc.b    'Sheet/Graphic 用の配列小さ過ぎません?',0
  1519. _irregular_param:
  1520.     .dc.b    '引き数の範囲が不正です',0
  1521. _無効な要素数:
  1522.     .dc.b    '無効な要素数を指定しました',0
  1523. _GetSendはE関数内で:
  1524.     .dc.b    'Get~()/SendUser() はイベント関数内でなければ実行出来ませんのです',0
  1525.     .even
  1526.  
  1527.     .end
  1528.  
  1529.  
  1530.  
  1531.  
  1532.  
  1533.  
  1534.  
  1535.